/**
 * Created by 小敏哥on 2017/3/8.
 */
import {YEARLY_CHECK_INFO} from "./actionsTypes";
import {Toast} from 'antd-mobile';
import updateCarInfoService from '../services/updateCarInfoService';
import YearlyInspectionService from '../services/YearlyInspectionService';

export const yearlyCheckInfo = data => ({type: YEARLY_CHECK_INFO, data: data}); //年检信息

export const getCalculation = (data, callBack) => {
    return (dispatch, getState) => {
        Toast.hide(); //加载前 先关闭其他加载中的提示框 避免提示框一直存在的bug
        Toast.loading("", 30, () => Toast.info("网络错误", 2));
        //别慌，此处与更新车辆信息调用同一个接口，没搞错
        updateCarInfoService.updateCar(data).then(resultData => {
            Toast.hide();
            if (resultData.code == 1000) {
                callBack();
            }
            else {
                Toast.info(resultData.msg, 2);
            }
        })
    }
};

//格式化时间字符串
function formatDate(dateString) {
    if(dateString) {
        dateString = dateString.replace(/-/g, '/');
        let date = new Date(dateString);
        return date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日';
    }
    else {
        return '';
    }
}

export const getCarViewInfo = (data, callBack) => {
    return (dispatch, getState) => {
        Toast.hide(); //加载前 先关闭其他加载中的提示框 避免提示框一直存在的bug
        Toast.loading("", 30, () => Toast.info("网络错误", 2));
        updateCarInfoService.getCarInfo(data).then(resultData => {
            Toast.hide();
            //状态码对照字典表
           
            let statusDictionary = {
                0: {
                    description: '正常',
                    imgUrl: './images/normal.png',
                    color: '#09BB07',
                    message: [`目前尚无需进行年检，可放心驾驶，您可于${ formatDate(resultData.data.nextDate)}预约年检办理`,`目前尚无需进行年检，可放心驾驶，您可于${ formatDate(resultData.data.nextDate)}预约年检办理`],
                    daysText: '距年检可预约天数',
                    littleTips: ''
                },
                1: {
                    description: '可预约',
                    imgUrl: './images/canOrder.png',
                    color: '#10AEFF',
                    message: [`车辆已进入年检办理周期，请您在年检有效期内办完年检，否则车辆将面临扣分和有事故不能出险的风险`,`车辆已进入年检办理周期，请您在年检有效期内办完年检，否则车辆将面临扣分和有事故不能出险的风险`],
                    daysText: '距年检到期天数',
                    littleTips: ''
                },
                2: {
                    description: '逾期',
                    imgUrl: './images/overdue.png',
                    color: '#FF9A0A',
                    message: [`车辆已逾期且未按规定在检验有效期内完成年检，请您尽快处理。否则车辆将面临扣分和有事故不能出险的风险`,`车辆年检已逾期，请您在年检有效期内办完年检，否则车辆将面临扣分和有事故不能出险的风险`],
                    daysText: '年检逾期天数',
                    littleTips: '(可免检)'
                },
                3: {
                    description: '逾期',
                    imgUrl: './images/overdue.png',
                    color: '#FF9A0A',
                    message: [`车辆已逾期且未按规定在检验有效期内完成年检，请您尽快处理。否则车辆将面临扣分和有事故不能出险的风险`,`车辆年检已逾期，请您在年检有效期内办完年检，否则车辆将面临扣分和有事故不能出险的风险`],
                    daysText: '年检逾期天数',
                    littleTips: ''
                },
                4: {
                    description: '严重逾期',
                    imgUrl: './images/overdue.png',
                    color: '#FF9A0A',
                    message: [`车辆已连续两次年检逾期，请您在下一次年检有效期之内完成车辆免检检测，不然车辆将直接报废`,`车辆已连续两次年检逾期，请您在下一次年检有效期之内完成车辆上线检测，不然车辆将直接报废`],
                    daysText: '年检逾期天数',
                    littleTips: ''
                },
                5: {
                    description: '报废',
                    imgUrl: './images/crap.png',
                    color: '#FF4444',
                    message: [`车辆未按规定在检验有效期内完成年检，并且逾期次数已连续超过3次。按我国机动车相关法规《机动车强制报废标准》的规定，车辆已达强制报废条件。请勿再驾驶此车上路，否则将被收缴并面临和吊销驾驶证的处罚`,`车辆未按规定在检验有效期内完成年检，并且逾期次数已连续超过3次。按我国机动车相关法规《机动车强制报废标准》的规定，车辆已达强制报废条件。请勿再驾驶此车上路，否则将被收缴并面临和吊销驾驶证的处罚`],
                    daysText: '年检逾期天数',
                    littleTips: ''
                },
            };
            let nextTypeDictionary = {
                1: "6年免检",
                2: "上线检测",
                3: "禁止上路",
                4: "未知",
                5:"暂无需年检"
            };
       
            if (resultData.code == 1000) {
              //  alert(JSON.stringify(resultData.data))
                const i=Number(resultData.data.bizFlag)-1;
                dispatch(yearlyCheckInfo({
                    carId: resultData.data.carId,//carId
                    carNumber: resultData.data.carNumber,//车牌号码
                    registerDate: resultData.data.registerDate,//注册日期
                    expiryDate: resultData.data.checkDate,//有效日期
                    status:resultData.data.state,//年检状态标识
                    bizFlag:resultData.data.bizFlag,//年检:免检：上线
                    description: statusDictionary[resultData.data.state].description,//年检状态
                    statusMsg: statusDictionary[resultData.data.state].message[i],//年检详细描述信息
                    nextType: nextTypeDictionary[resultData.data.nextState],//下次年检类型
                    nextState: resultData.data.nextState,//仅用于显示的年检类型，不参与逻辑判断
                    imgUrl: statusDictionary[resultData.data.state].imgUrl,//对应图标
                    color: statusDictionary[resultData.data.state].color,//对应字体颜色
                    canCheck: resultData.data.bizFlag != 3,//是否提供链接跳转到年检办理页面
                    days: resultData.data.days,//天数
                    daysText: statusDictionary[resultData.data.state].daysText,//天数提示文字
                    littleTips: statusDictionary[resultData.data.state].littleTips,//右上角灰色小标签
                }));
                callBack && callBack();
            }
            else {
                Toast.info(resultData.msg, 2);
            }
        });
    }
};

//更新年检信息
export const updateMessage = (data, callBack) => {
    return (dispatch, getState) => {
        Toast.hide();
        Toast.loading("", 30, () => Toast.info("网络错误", 2));
        YearlyInspectionService.inspectionCheckList({registerDate: data.registerDate}).then(resultData => {
            return {checkDate: resultData.data.dateList[0].checkDate};//获取最后一次的检验有效期
        }).then((resultData) => {
            //增加updateMode字段，表示优先从中大获取更新数据
            let updateData = Object.assign(data, resultData,{updateMode:1});
            return updateCarInfoService.updateCar(updateData);
        }).then((resultData) => {
            Toast.hide();
            if (resultData.code == 1000) {
                //dispatch(getCarViewInfo(data));
                callBack && callBack()
            } else {
                Toast.info(resultData.msg, 2);
            }
        }).catch((error) => {
            Toast.info('请求数据出错', 2);
        })
    }
};